//package com.hsylient.translator.gpt;
//
//import cn.hutool.json.JSONUtil;
//import cn.hutool.poi.excel.ExcelReader;
//import cn.hutool.poi.excel.ExcelUtil;
//import cn.hutool.poi.excel.ExcelWriter;
//import com.alibaba.fastjson2.JSON;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.function.Function;
//import java.util.stream.Collectors;
//
//public class TranslatorExcel {
//
//    private static final String EXCEL_LOCATION = "C:\\Users\\Hsylient\\Desktop\\Nove-X翻译2.xlsx";
//
//    // 第几个sheet页，从0开始计数
//    private static final Integer SHEET_INDEX = 9;
//    private static final ExcelWriter writer = ExcelUtil.getWriter(EXCEL_LOCATION, "Roadmap");
//    private static final ExcelReader reader = ExcelUtil.getReader(EXCEL_LOCATION, SHEET_INDEX);
//
//    // 每次请求api处理翻译的数量
//    private static final Integer BATCH_SIZE = 30;
//
//    private static final String DES_LANGUAGE = "法语";
//
//    // 新增的法语在那一列
//    private static final Integer DES_ROW = 12;
//
//    // 最大重试次数
//    private static final Integer MAX_RETRY = 3;
//
//
//    public static void main(String[] args) throws InterruptedException {
//        // excel写一下列名（这一列写入的是什么语种）
//        writer.writeCellValue(DES_ROW, 0, DES_LANGUAGE);
//
//        // 读取第一列
//        List<Object> objectList = reader.readColumn(1, 1);
//
//        List<List<Object>> subLists = new ArrayList<>((objectList.size() / BATCH_SIZE) + 1);
//
//        for (int i = 0; i < objectList.size(); i += BATCH_SIZE) {
//            int endIndex = Math.min(i + BATCH_SIZE, objectList.size());
//            List<Object> subList = objectList.subList(i, endIndex);
//            subLists.add(subList);
//        }
//
//        for (int i = 10; i < subLists.size(); i++) {
//            System.out.println("第" + i + "进行批量翻译，一次翻译的数量为：" + subLists.get(i).size());
//            System.out.println("原数据集合：" + JSON.toJSONString(subLists.get(i)));
//            // 跟gpt沟通
//            retryMethod(GPTUtil::callParseResponse, "请将集合中的内容以数字交易为背景翻译为法语，并且以数组的格式返回给我，集合：" + JSON.toJSONString(subLists.get(i)), i, subLists.get(i).size());
//        }
//    }
//
//    public static void retryMethod(Function<String, GptResponse> function, String param, Integer i, Integer size) throws InterruptedException {
//        int retryCount = 0;
//        while (retryCount < MAX_RETRY) {
//            try {
//                // 解析gpt的答案
//                GptResponse gptResponse = function.apply(param);
//                if (gptResponse.getChoices() == null) {
//                    System.out.println("gpt 返回结果为空。。。。");
//                }
//                String content = gptResponse.getChoices().get(0).getMessage().getContent();
//                System.out.println("法语数据集合:" + content);
//                // 字符串解析为数组
//                List<String> strings = JSONUtil.toList(content, String.class);
//                if (strings.size() != size) {
//                    throw new RuntimeException("gpt返回的翻译数量不正确");
//                }
//                List<String> collect;
//                if (strings.get(0).contains("1.")) {
//                    collect = strings.stream().map(x -> x.substring(x.indexOf(".") + 1)).collect(Collectors.toList());
//                } else {
//                    collect = strings;
//                }
//                for (int j = 0; j < size; j++) {
//                    writer.writeCellValue(DES_ROW, i * BATCH_SIZE + j + 1, collect.get(j));
//                }
//                writer.flush();
//                break;
//            } catch (Exception e) {
//                retryCount++;
//                if (retryCount == MAX_RETRY) {
//                    e.printStackTrace();
//                }
//                System.out.println("方法调用失败，进行第 " + retryCount + " 次重试...");
//                Thread.sleep(5000);
//            }
//        }
//        if (retryCount == MAX_RETRY) {
//            System.out.println("方法调用仍然失败，已达到最大重试次数，写入失败");
//        }
//    }
//}
